From cc12ca26b59fd0666bb4308c03eb80c9823bfdf0 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Tue, 28 Feb 2006 19:00:15 +0100 Subject: [PATCH] Allow tpmfront/tpmback to be built as modules. From: Jan Beulich Signed-off-by: Keir Fraser --- linux-2.6-xen-sparse/drivers/xen/Kconfig | 4 ++-- .../drivers/xen/tpmback/common.h | 2 ++ .../drivers/xen/tpmback/interface.c | 6 ++++++ .../drivers/xen/tpmback/tpmback.c | 15 ++++++++++++++- .../drivers/xen/tpmback/xenbus.c | 5 +++++ .../drivers/xen/tpmfront/tpmfront.c | 18 +++++++++++++++++- 6 files changed, 46 insertions(+), 4 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/Kconfig b/linux-2.6-xen-sparse/drivers/xen/Kconfig index 2cd2d937ea..7a6a569a57 100644 --- a/linux-2.6-xen-sparse/drivers/xen/Kconfig +++ b/linux-2.6-xen-sparse/drivers/xen/Kconfig @@ -118,7 +118,7 @@ config XEN_NETDEV_LOOPBACK connection. config XEN_TPMDEV_BACKEND - bool "TPM-device backend driver" + tristate "TPM-device backend driver" default n help The TPM-device backend driver @@ -162,7 +162,7 @@ config XEN_BLKDEV_TAP space. Odds are that you want to say N here. config XEN_TPMDEV_FRONTEND - bool "TPM-device frontend driver" + tristate "TPM-device frontend driver" default n select TCG_TPM select TCG_XEN diff --git a/linux-2.6-xen-sparse/drivers/xen/tpmback/common.h b/linux-2.6-xen-sparse/drivers/xen/tpmback/common.h index bcb01ac9da..44a3d4c9e9 100644 --- a/linux-2.6-xen-sparse/drivers/xen/tpmback/common.h +++ b/linux-2.6-xen-sparse/drivers/xen/tpmback/common.h @@ -54,9 +54,11 @@ typedef struct tpmif_st { void tpmif_disconnect_complete(tpmif_t * tpmif); tpmif_t *tpmif_find(domid_t domid, long int instance); void tpmif_interface_init(void); +void tpmif_interface_exit(void); void tpmif_schedule_work(tpmif_t * tpmif); void tpmif_deschedule_work(tpmif_t * tpmif); void tpmif_xenbus_init(void); +void tpmif_xenbus_exit(void); int tpmif_map(tpmif_t *tpmif, unsigned long shared_page, unsigned int evtchn); irqreturn_t tpmif_be_int(int irq, void *dev_id, struct pt_regs *regs); int tpmif_vtpm_open(tpmif_t *tpmif, domid_t domain, u32 instance); diff --git a/linux-2.6-xen-sparse/drivers/xen/tpmback/interface.c b/linux-2.6-xen-sparse/drivers/xen/tpmback/interface.c index eebe9c84aa..28e8b49c43 100644 --- a/linux-2.6-xen-sparse/drivers/xen/tpmback/interface.c +++ b/linux-2.6-xen-sparse/drivers/xen/tpmback/interface.c @@ -186,6 +186,12 @@ tpmif_interface_init(void) 0, 0, NULL, NULL); } +void __init +tpmif_interface_exit(void) +{ + kmem_cache_destroy(tpmif_cachep); +} + /* * Local variables: * c-file-style: "linux" diff --git a/linux-2.6-xen-sparse/drivers/xen/tpmback/tpmback.c b/linux-2.6-xen-sparse/drivers/xen/tpmback/tpmback.c index 7b9570440e..d20542f6a2 100644 --- a/linux-2.6-xen-sparse/drivers/xen/tpmback/tpmback.c +++ b/linux-2.6-xen-sparse/drivers/xen/tpmback/tpmback.c @@ -1092,7 +1092,20 @@ tpmback_init(void) return 0; } -__initcall(tpmback_init); +module_init(tpmback_init); + +static void __exit +tpmback_exit(void) +{ + + tpmif_xenbus_exit(); + tpmif_interface_exit(); + misc_deregister(&ibmvtpms_miscdevice); +} + +module_exit(tpmback_exit); + +MODULE_LICENSE("Dual BSD/GPL"); /* * Local variables: diff --git a/linux-2.6-xen-sparse/drivers/xen/tpmback/xenbus.c b/linux-2.6-xen-sparse/drivers/xen/tpmback/xenbus.c index 556d23e8d3..9a2be8d593 100644 --- a/linux-2.6-xen-sparse/drivers/xen/tpmback/xenbus.c +++ b/linux-2.6-xen-sparse/drivers/xen/tpmback/xenbus.c @@ -317,6 +317,11 @@ void tpmif_xenbus_init(void) xenbus_register_backend(&tpmback); } +void tpmif_xenbus_exit(void) +{ + xenbus_unregister_driver(&tpmback); +} + /* * Local variables: * c-file-style: "linux" diff --git a/linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c b/linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c index 1d7b341383..6f53299f42 100644 --- a/linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c +++ b/linux-2.6-xen-sparse/drivers/xen/tpmfront/tpmfront.c @@ -480,6 +480,11 @@ static void __init init_tpm_xenbus(void) xenbus_register_frontend(&tpmfront); } +static void __exit exit_tpm_xenbus(void) +{ + xenbus_unregister_driver(&tpmfront); +} + static int tpm_allocate_buffers(struct tpm_private *tp) @@ -700,7 +705,18 @@ tpmif_init(void) return 0; } -__initcall(tpmif_init); +module_init(tpmif_init); + +static void __exit +tpmif_exit(void) +{ + exit_tpm_xenbus(); + gnttab_free_grant_references(gref_head); +} + +module_exit(tpmif_exit); + +MODULE_LICENSE("Dual BSD/GPL"); /* * Local variables: -- 2.30.2